iT邦幫忙

2022 iThome 鐵人賽

DAY 26
0
自我挑戰組

30天JavaScript自學挑戰系列 第 26

Day 26 JavaScript引擎

  • 分享至 

  • xImage
  •  

JavaScript引擎是執行JavaScript程式碼的電腦程式,這涉及到很多步驟,每個瀏覽器都有自己的JavaScript引擎,其中較知名的像是Google的V8引擎。

任何的JavaScript引擎都包含call stack和heap,call stack是程式碼實際執行的地方,而heap是非結構化的儲存池,儲存應用程式所需的所有物件。

當一段JavaScript程式碼進入引擎時,第一步是先解析這些程式碼,程式碼會被解析成一個數據結構,稱為AST(Abstract Syntax Tree),先將程式碼拆分成對語言有意義的片段,像是const或function等關鍵字,然後將這些片段以結構化的方式儲存到AST中,並檢查是否有語法錯誤,而生成的AST之後會用於生成machine code。

題外話,AST和DOM tree並無任何關聯,它就只是引擎中所有程式碼的代表而已。

下一步進入到編譯,AST會被編譯成machine code,我們在昨天的文章中有提到現代JavaScript引擎使用的是即時編譯,因此machine code不會變成可移植的文件,而是會被立即執行,執行這個部分就是發生在call stack當中。

現代JavaScript引擎的優化策略是在一開始先做出尚未被優化的machine code版本,然後盡快的執行它,在執行期間,引擎會在後台將這些程式碼再不斷的優化及重新編譯,並取代較未優化的程式碼,就是這個過程讓現代JavaScript引擎的效能變得如此快速。

這些解析、編譯和優化的過程都發生在引擎內部運作裡,和call stack中主要運作的程式碼是完全分隔開來的。


上一篇
Day 25 直譯 v.s. 即時編譯
下一篇
Day 27 Execution Context (EC)
系列文
30天JavaScript自學挑戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言